import pandas as pd 
import numpy as np
import time
import cx_Oracle
from sqlalchemy import create_engine



#模型分群函数
def get_model_type(dfjch,dic_size,dic_size_gb,lst_1,lst_0,lst_all):  # 传入客户基础信息表 主要字段：两个规模 行业code ,评价列表 两高划分列表
    #映射
    dfjch['scale2'] = dfjch.comp_size.astype('str').map(dic_size)                                         #将规模code映射成中文
    dfjch['scale1'] = dfjch.comp_size_gb.astype('str').map(dic_size_gb)                                   #GB为主
    print('规模映射结束')
    print(' ')
    #填充
    print('规模填充开始')
    dfjch.loc[~dfjch.scale1.isin(['大中','小微']),'scale1']  = dfjch.scale2                               #新模式填充规模 
    print('规模填充结束')
    ### 行业
    #区分评价与否
    print(' ')
    print('行业评价范围界定开始')
    cond = dfjch.industry_code.str[:3].isin(lst_all)                                                          #行业评价范围界定
    dfjch.loc[cond,'if_evalate_industry'] = 1                                                             #做出标记
    dfjch.if_evalate_industry.fillna(0,inplace=True)                                                      #不评价记为0
    
    #区分两高非两高
    dfjch.loc[dfjch.industry_code.str[:3].isin(lst_1),'indu_type']= '两高'                                    #两高
    dfjch.loc[dfjch.industry_code.str[:3].isin(lst_0),'indu_type'] = '非两高'                                 #非两高
    print('行业评价范围界定结束')
    print(' ')
    ### 综合定出模型类型
    dfjch['if_evalate_scale'] = dfjch.scale1.notnull().astype('int')                                      #规模评价范围界定

    # 进行模型分群
    print('模型分类开始')
    dfjch.loc[(dfjch.indu_type == '非两高') & (dfjch.scale1 == '大中'),'model_type'] = 'ntb'              #非两高大中
    dfjch.loc[(dfjch.indu_type == '非两高') & (dfjch.scale1 == '小微'),'model_type'] = 'nts'              #非两高小微
    dfjch.loc[(dfjch.indu_type == '两高') & (dfjch.scale1 == '大中'),'model_type'] = 'ytb'                #两高大中
    dfjch.loc[(dfjch.indu_type == '两高') & (dfjch.scale1 == '小微'),'model_type'] = 'yts'                #两高小微
    

    # 不评价的进行标记
    dfjch.loc[(dfjch.if_evalate_industry == 0) & (dfjch.if_evalate_scale == 1) ,'model_type']  = 'bup1'   #行业不在划分范围内
    dfjch.loc[(dfjch.if_evalate_industry == 1) & (dfjch.if_evalate_scale == 0) ,'model_type']  = 'bup2'   #规模无法界定
    dfjch.loc[(dfjch.if_evalate_industry == 0) & (dfjch.if_evalate_scale == 0) ,'model_type']  = 'bup3'   #行业与规模都不在划分范围内
    print('模型分类结束')
    
    return  dfjch[['rating_id','batch_id','id_number','industry_code','model_type']]                          #返回模型类型
